public class Leetcode {
}

//leetcode:740:删除并获得点数
class Solution1 {
    public int deleteAndEarn(int[] nums) {
        int n = 10001;
        //创建一个数组，将nums数组中的元素作为arr数组的下标，同时这个下标存放的是这个下标在nums数组中的所有加和
        int[] arr = new int[n];
        for(int x : nums) arr[x] += x;

        //将arr数组进行一次打家劫舍的方法
        int[] f = new int[n];
        int[] g = new int[n];

        f[0] = arr[0];
        for(int i = 1; i < n ;i++){
            f[i] = g[i-1] + arr[i];
            g[i] = Math.max(f[i-1], g[i-1]);
        }
        return Math.max(f[n-1],g[n-1]);
    }
}

//leetcode:LCR 091.粉刷房子
class Solution2 {
    public int minCost(int[][] costs) {
        int n = costs.length;
        int[][] dp = new int[n][3];
        for(int i = 0; i < 3; i++){
            dp[0][i] = costs[0][i];
        }
        for(int i = 1; i < n; i++){
            dp[i][0] = costs[i][0] + Math.min(dp[i-1][1] , dp[i-1][2]);
            dp[i][1] = costs[i][1] + Math.min(dp[i-1][0] , dp[i-1][2]);
            dp[i][2] = costs[i][2] + Math.min(dp[i-1][0] , dp[i-1][1]);
        }
        return Math.min(dp[n-1][0],Math.min(dp[n-1][1],dp[n-1][2]));
    }
}